﻿//===================================================================================
// Copyright (c) Ryan Garrett.  All rights reserved.
// THIS CODE AND INFORMATION IS PROVIDED "AS IS" WITHOUT WARRANTY
// OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING BUT NOT
// LIMITED TO THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
// FITNESS FOR A PARTICULAR PURPOSE.
//===================================================================================

using System;

namespace Caffeine.Core.Test.TestModel
{
    public class ModelForCommandAutoRegisterTestingA : ModelBase
    {
        #region DateOfBirth Property

        [System.CodeDom.Compiler.GeneratedCode("ModelProperty Snippet", "1.0")]
        [Caffeine.Core.ModelBackingProperty(typeof(DateTime?), "DateOfBirthProperty", Caffeine.Core.ModelBase.StandardBehaviors, false, true)]
        protected readonly Caffeine.Core.ModelProperty<DateTime?> _DateOfBirthProperty = null; //Will be set by reflection.

        /// <summary>
        /// Gets the DateOfBirth backing property
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelProperty Snippet", "1.0")]
        public Caffeine.Core.ModelProperty<DateTime?> DateOfBirthProperty
        {
            get { return _DateOfBirthProperty; }
        }

        /// <summary>
        /// Gets or sets the DateOfBirthProperty.Value value. This property supports change notification. If the DateOfBirthProperty.Value value changes,
        /// it will cause a change notification event for this property. This property must follow the [DateOfBirthProperty - "Property"] convention for change events to work correctly.
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelProperty Snippet", "1.0")]
        public DateTime? DateOfBirth
        {
            get { return DateOfBirthProperty.Value; }
            set { DateOfBirthProperty.Value = value; }
        }

        /// <summary>
        /// Gets the DateOfBirthProperty.CommittedValue value. This property supports change notification. If the DateOfBirthProperty.CommittedValue value changes,
        /// it will cause a change notification event for this property. This property must follow the [DateOfBirth + "CommittedValue"] convention for change events to work correctly.
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelProperty Snippet", "1.0")]
        public DateTime? DateOfBirthCommittedValue
        {
            get { return DateOfBirthProperty.CommittedValue; }
        }

        /// <summary>
        /// Gets the DateOfBirthProperty.IsDirty flag. This property supports change notification. If the DateOfBirthProperty.IsDirty flag changes,
        /// it will cause a change notification event for this property. This property must follow the [DateOfBirth + "IsDirty"] convention for change events to work correctly.
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelProperty Snippet", "1.0")]
        public bool DateOfBirthIsDirty
        {
            get { return DateOfBirthProperty.IsDirty; }
        }

        /// <summary>
        /// Gets the DateOfBirthProperty.IsInvalid flag. This property supports change notification. If the DateOfBirthProperty.IsInvalid flag changes,
        /// it will cause a change notification event for this property. This property must follow the [DateOfBirth + "IsInvalid"] convention for change events to work correctly.
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelProperty Snippet", "1.0")]
        public bool DateOfBirthIsInvalid
        {
            get { return DateOfBirthProperty.IsInvalid; }
        }

        /// <summary>
        /// Gets the DateOfBirthProperty.IsDefault flag. This property supports change notification. If the DateOfBirthProperty.IsDefault flag changes,
        /// it will cause a change notification event for this property. This property must follow the [DateOfBirth + "IsDefault"] convention for change events to work correctly.
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelProperty Snippet", "1.0")]
        public bool DateOfBirthIsDefault
        {
            get { return DateOfBirthProperty.IsDefault; }
        }

        /// <summary>
        /// Gets the DateOfBirthProperty.ValidationErrors enumeration. This property supports change notification. If the DateOfBirthProperty.ValidationErrors enumeration changes,
        /// it will cause a change notification event for this property. This property must follow the [DateOfBirth + "ValidationErrors"] convention for change events to work correctly.
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelProperty Snippet", "1.0")]
        public System.Collections.Generic.IEnumerable<Caffeine.Core.ValidationError> DateOfBirthValidationErrors
        {
            get { return DateOfBirthProperty.ValidationErrors; }
        }

        #endregion

        #region DoSomethingA Command

        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        [Caffeine.Core.ModelCommandBackingProperty("OnDoSomethingAExecute", "OnCanDoSomethingAQuery", typeof(string))]
        protected readonly Caffeine.Core.ModelCommand<string> _DoSomethingACommand = null; //Will be set by reflection.

        /// <summary>
        /// Gets the DoSomethingACommand
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public Caffeine.Core.ModelCommand<string> DoSomethingACommand
        {
            get { return _DoSomethingACommand; }
        }

        /// <summary>
        /// Executes the DoSomethingACommand 
        /// </summary>
        /// <param name="parent">Parent view model which owns the DoSomethingACommand</param>
        /// <param name="parameter">Command parameter</param>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public void OnDoSomethingAExecute(Caffeine.Core.ModelBase parent, string parameter)
        {
        }

        /// <summary>
        /// Queries whether or not the DoSomethingACommand can execute
        /// </summary>
        /// <param name="parent">Parent view model which owns the DoSomethingACommand</param>
        /// <param name="parameter">Parameter to consider</param>
        /// <returns>True if the DoSomethingACommand can execute with the parameter specified, otherwise false.</returns>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public bool OnCanDoSomethingAQuery(Caffeine.Core.ModelBase parent, string parameter)
        {
            return true;
        }

        #endregion

        #region DoSomethingB Command

        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        [Caffeine.Core.ModelCommandBackingProperty("OnDoSomethingBExecute", "OnCanDoSomethingBQuery", typeof(int))]
        protected readonly Caffeine.Core.ModelCommand<int> _DoSomethingBCommand = null; //Will be set by reflection.

        /// <summary>
        /// Gets the DoSomethingBCommand
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public Caffeine.Core.ModelCommand<int> DoSomethingBCommand
        {
            get { return _DoSomethingBCommand; }
        }

        /// <summary>
        /// Executes the DoSomethingBCommand 
        /// </summary>
        /// <param name="parent">Parent view model which owns the DoSomethingBCommand</param>
        /// <param name="parameter">Command parameter</param>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public void OnDoSomethingBExecute(Caffeine.Core.ModelBase parent, int parameter)
        {
        }

        /// <summary>
        /// Queries whether or not the DoSomethingBCommand can execute
        /// </summary>
        /// <param name="parent">Parent view model which owns the DoSomethingBCommand</param>
        /// <param name="parameter">Parameter to consider</param>
        /// <returns>True if the DoSomethingBCommand can execute with the parameter specified, otherwise false.</returns>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public bool OnCanDoSomethingBQuery(Caffeine.Core.ModelBase parent, int parameter)
        {
            return true;
        }

        #endregion

        #region DoSomethingC Command

        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        [Caffeine.Core.ModelCommandBackingProperty("OnDoSomethingCExecute", "OnCanDoSomethingCQuery", typeof(ModelBase))]
        protected readonly Caffeine.Core.ModelCommand<ModelBase> _DoSomethingCCommand = null; //Will be set by reflection.

        /// <summary>
        /// Gets the DoSomethingCCommand
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public Caffeine.Core.ModelCommand<ModelBase> DoSomethingCCommand
        {
            get { return _DoSomethingCCommand; }
        }

        /// <summary>
        /// Executes the DoSomethingCCommand 
        /// </summary>
        /// <param name="parent">Parent view model which owns the DoSomethingCCommand</param>
        /// <param name="parameter">Command parameter</param>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public void OnDoSomethingCExecute(Caffeine.Core.ModelBase parent, ModelBase parameter)
        {
        }

        /// <summary>
        /// Queries whether or not the DoSomethingCCommand can execute
        /// </summary>
        /// <param name="parent">Parent view model which owns the DoSomethingCCommand</param>
        /// <param name="parameter">Parameter to consider</param>
        /// <returns>True if the DoSomethingCCommand can execute with the parameter specified, otherwise false.</returns>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public bool OnCanDoSomethingCQuery(Caffeine.Core.ModelBase parent, ModelBase parameter)
        {
            return true;
        }

        #endregion

        #region DoSomethingD Command

        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        [Caffeine.Core.ModelCommandBackingProperty("OnDoSomethingDExecute", "OnCanDoSomethingDQuery", typeof(string[]))]
        protected readonly Caffeine.Core.ModelCommand<string[]> _DoSomethingDCommand = null; //Will be set by reflection.

        /// <summary>
        /// Gets the DoSomethingDCommand
        /// </summary>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public Caffeine.Core.ModelCommand<string[]> DoSomethingDCommand
        {
            get { return _DoSomethingDCommand; }
        }

        /// <summary>
        /// Executes the DoSomethingDCommand 
        /// </summary>
        /// <param name="parent">Parent view model which owns the DoSomethingDCommand</param>
        /// <param name="parameter">Command parameter</param>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public void OnDoSomethingDExecute(Caffeine.Core.ModelBase parent, string[] parameter)
        {
        }

        /// <summary>
        /// Queries whether or not the DoSomethingDCommand can execute
        /// </summary>
        /// <param name="parent">Parent view model which owns the DoSomethingDCommand</param>
        /// <param name="parameter">Parameter to consider</param>
        /// <returns>True if the DoSomethingDCommand can execute with the parameter specified, otherwise false.</returns>
        [System.CodeDom.Compiler.GeneratedCode("ModelCommand Snippet", "1.0")]
        public bool OnCanDoSomethingDQuery(Caffeine.Core.ModelBase parent, string[] parameter)
        {
            return true;
        }

        #endregion
    }
}
